package dlwntk6545.swing;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

//메뉴 작성법
//JMenuBar -> JMenu -> JMenuItem

public class SwingMenu extends JMenuBar{
	
	private JMenu mnFile = null;	//파일
	private JMenu mnEdit = null;	//편집
	private JMenu mnView = null;	//보기
	private JMenu mnTool = null;	//도구
	private JMenu mnWnd = null;		//창
	private JMenu mnHelp = null;	//도움말
	
	//메서드 등록
	private static SwingMenuActionListener mnal = null;
	
	public SwingMenu() {
		mnal = new SwingMenuActionListener();
		makeMenu();
		makeMenuItem();
		addShortCut();
		addMenu();
		
	}
	
	//메뉴바에 추가할 메뉴를 생성함
	private void makeMenu(){
		
		mnFile = new JMenu(" 파 일(F)");
		//mnFile.setFont("맑은 고딕",Font, PLAIN, 12);
		//메뉴 글꼴 변경을 위해 setFont 메서드 사용
		//하지만, 모든 메누와 메뉴항목에 setFont 를 사용하는 것은 무척 번거러운 일임
		//폰트를 다른것으로 바꾸는 날은 절망 OTL 
		//따라서, 프로그램 전체 글꼴을 변경하는 방식을 사용
		//main 메서드에서 FontUIResource
		mnEdit = new JMenu(" 편 집(E)");
		mnView = new JMenu(" 보 기(V)");
		mnTool = new JMenu(" 도 구(T)");
		mnWnd = new JMenu(" 창(W)");
		mnHelp = new JMenu("도움말(H)");
		
	}
	
	//메뉴항목에 단축키 지정
	private void addShortCut() {
		
		mnFile.setMnemonic(KeyEvent.VK_F);
		mnEdit.setMnemonic(KeyEvent.VK_E);
		mnView.setMnemonic(KeyEvent.VK_V);
		mnTool.setMnemonic(KeyEvent.VK_T);
		mnWnd.setMnemonic(KeyEvent.VK_W);
		mnHelp.setMnemonic(KeyEvent.VK_H);
		
	}
	//생성 및 설정된 메뉴를 메뉴바에 추가
	private void addMenu() {
		
		add(mnFile);
		add(mnEdit);
		add(mnView);
		add(mnTool);
		add(mnWnd);
		add(mnHelp);
		
	}
	
	//메뉴에 추가할 메뉴항목 menuitem 생성
	//배열을 이용하면 쬐끔(?) 편해짐(아마도)
	private JMenuItem makeMenuItems(String text, String img, int skey, 
			boolean off, int akey){
		
		String icon = null;			//메뉴에 쓸 아이콘
		if(img != null){			//아이콘이미지가 있으면
			icon = "/images/menu/" + img + ".png";
		}
		
		JMenuItem mnitem = null;	//메뉴 항목
		try{
			mnitem = new JMenuItem(text, new ImageIcon(getClass().getResource(icon)));
		}catch(Exception ex){
			mnitem = new JMenuItem(text);
		}
		
		mnitem.setEnabled(off);
		mnitem.setMnemonic(skey);
		mnitem.setAccelerator(KeyStroke.getKeyStroke(akey, ActionEvent.CTRL_MASK));	//단축키
		
		//이벤트 처리관련 메서드 등록
		mnitem.addActionListener(mnal);
		mnitem.setActionCommand(img);
		
		return mnitem;
		
	}
	
	
	//메뉴에 메뉴항목 추가
	
	private void makeMenuItem() {
		
		mnFile.add(makeMenuItems("새 파일(N)     ", "new", KeyEvent.VK_N, true,KeyEvent.VK_1));
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("닫 기(C)     ", "close", KeyEvent.VK_N, true,KeyEvent.VK_2));
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("종 료(X)     ", "exit", KeyEvent.VK_N, true,KeyEvent.VK_3));
		
		mnHelp.add(makeMenuItems("프로젝트정보", "about", KeyEvent.VK_A, true, KeyEvent.VK_6));
		
	}
	
}
